package com.xjk.excel;

import java.util.HashMap;
import java.util.Map;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;

/**
 * @author xjk
 * @date 2024-10-18
 */
public enum TextAlignmentEnum {

  /**
   * 常规
   * 描述：这是默认的对齐方式，内容的对齐方式根据数据类型自动调整。
   *   文本数据：左对齐。
   *   数字、日期和时间：右对齐。
   *   布尔类型：居中对齐。
   */
  GENERAL("general"),
  /**
   * 左对齐
   * 描述：内容在单元格的左边缘对齐，即使在从右到左（Right-to-Left，RTL）模式下也是如此。
   */
  LEFT("left"),
  /**
   * 居中对齐
   * 描述：内容在单元格中水平居中对齐。
   */
  CENTER("center"),
  /**
   * 顶部对齐
   * 描述：内容在单元格中与顶部对齐。
   */
  TOP("top"),
  /**
   * 底部对齐
   * 描述：内容在单元格中与底部对齐。
   */
  BOTTOM("bottom"),
  /**
   * 右对齐
   * 描述：内容在单元格的右边缘对齐，即使在从右到左（RTL）模式下也是如此。
   */
  RIGHT("right"),
  /**
   * 填充
   * 描述：单元格的值会在整个宽度上重复填充。如果相邻的空白单元格也设置了填充对齐，它们也会使用相同的值填充，类似于 centerContinuous 的效果。
   * 附加规则：
   *   只能追加完整的值，不能部分追加。
   *   列的宽度不会根据填充值的“最佳适配”自动调整。
   *   如果追加额外的值会超过单元格的左右边界，则不会追加该值。
   *   填充的是单元格的显示值，而不是底层的原始数据。
   */
  FILL("fill"),
  /**
   * 两端对齐
   * 描述：内容在单元格内两端对齐（左对齐和右对齐）。对于每一行换行的文本，除了最后一行外，都会调整空格使其左右两端对齐。如果内容只有一行且没有换行，则不进行两端对齐。
   */
  JUSTIFY("justify"),
  /**
   * 两端对齐并调整字间距
   * 描述：内容在多个合并单元格中居中对齐。
   */
  CENTER_SELECTION("centerSelection"),
  /**
   * 分布对齐
   * 描述：单元格内每行文本的每个“单词”均匀分布在单元格宽度内，左右两边对齐。
   */
  DISTRIBUTED("distributed")
  ;
  private String value;

  TextAlignmentEnum(String value) {
    this.value = value;
  }

  public static Map<TextAlignmentEnum, HorizontalAlignment> xMap = new HashMap<>();
  public static Map<TextAlignmentEnum, VerticalAlignment> yMap = new HashMap<>();

  static {
    xMap.put(GENERAL, HorizontalAlignment.GENERAL);
    xMap.put(LEFT, HorizontalAlignment.LEFT);
    xMap.put(CENTER, HorizontalAlignment.CENTER);
    xMap.put(RIGHT, HorizontalAlignment.RIGHT);
    xMap.put(FILL, HorizontalAlignment.FILL);
    xMap.put(JUSTIFY, HorizontalAlignment.JUSTIFY);
    xMap.put(CENTER_SELECTION, HorizontalAlignment.CENTER_SELECTION);
    xMap.put(DISTRIBUTED, HorizontalAlignment.DISTRIBUTED);
    yMap.put(TOP, VerticalAlignment.TOP);
    yMap.put(BOTTOM, VerticalAlignment.BOTTOM);
    yMap.put(CENTER, VerticalAlignment.CENTER);
    yMap.put(JUSTIFY, VerticalAlignment.JUSTIFY);
    yMap.put(DISTRIBUTED, VerticalAlignment.DISTRIBUTED);
  }
}